//
// Created by Administrator on 2021/5/18.
//

/*
输入整数数组 arr ，找出其中最小的 k 个数。例如，输入4、5、1、6、2、7、3、8这8个数字，则最小的4个数字是1、2、3、4。

示例 1：

输入：arr = [3,2,1], k = 2
输出：[1,2] 或者 [2,1]
示例 2：

输入：arr = [0,1,2,1], k = 1
输出：[0]
*/
#include <vector>
#include <iostream>
#include <queue>
#include <algorithm>

using namespace std;

class Solution {
public:
    vector<int> getLeastNumbers(vector<int> &arr, int k) {
        priority_queue<int> pq;
        for (const auto &x:arr) {
            pq.push(x);
            if (pq.size() > k) pq.pop();
        }
        vector<int> ans;
        while (!pq.empty()) {
            ans.push_back(pq.top());
            pq.pop();
        }
        return ans;
    }

    vector<int> getLeastNumbers2(vector<int> &arr, int k) {
        vector<int> vec(k, 0);
        sort(arr.begin(), arr.end());
        for (int i = 0; i < k; ++i) {
            vec[i] = arr[i];
        }
        return vec;
    }
};


int main() {
    vector<int> v1{4, 5, 1, 6, 2, 7, 3, 8};
    Solution sol;
    auto ans = sol.getLeastNumbers2(v1, 4);
    for (auto &x:ans) cout << x << endl;
    return 0;
}